$.texyla("initPlugin", function () {
	// seznam otevřených oken
	// 		název: jQuery objekt
	this.openedWindows = {};
});

$.texyla("extend", {
	/**
	 *	Funkce pro vytvoření okna
	 *	@param options objekt s vlastnostmi okna
	 *		- string name: jméno okna (povinné)
	 *		- jQuery el: obsah okna (povinné)
	 *		- function func: funkce provedená při kliknutí na OK
	 *		- map options: vlastnosti UI dialogu
	 *		- string title: titulek dialogu 
	 */
	window: function (options) {
		// kontrola, jestli je načteno jQuery UI Dialog
		if (typeof(options.el.dialog) != "function") {
			alert("Error: jQuery UI Dialog is not loaded!");
			return;
        }

		var _this = this;
		
		// vytvořit okno
		if (!this.openedWindows[options.name]) { // pokud ještě neexistuje
			// přiřazení jQuery objektu obsahu do seznamu otevřených oken
			this.openedWindows[options.name] = options.el;
			
			// nastavení dialogu
			var dialogOptions = options.options || {};
			
			// rozměry
			var dimensions = this.options[options.name + "WindowDimensions"];
			if (dimensions) {
				dialogOptions.width = dimensions[0];
				dialogOptions.height = dimensions[1];
			}
			
			// titulek
			if (!dialogOptions.title && options.title) {
				dialogOptions.title = options.title;
			}
			
			// tlačítka
			if (options.func) { // pokud má options vlastnost func
				var buttons = {};
				
				// tlačítko OK
				buttons[this.lng.windowOk] = function () {
					options.func();
					if (!options.stayOpened) options.el.dialog("close");
				};
				
				// tlačítko Storno
				buttons[this.lng.windowCancel] = function () {
					options.el.dialog("close");
				};
				
				// tlačítka přidat k nastavení dialogu
				dialogOptions.buttons = buttons;
			}
			
			// UI bug fix
			var dimensionFix = function () {
				options.el.css({
					width: "auto",
					height: "auto"
				});
			};
			dialogOptions.open = dimensionFix;
			dialogOptions.resizeStop = dimensionFix;
			
			// zavření
			dialogOptions.close = function () {
				// zrušení objektu v domu
				_this.openedWindows[options.name].dialog("destroy").remove();
				// vynulování
				_this.openedWindows[options.name] = null;
			};
			
			// vytvořit dialog
			options.el.dialog(dialogOptions);
			
			// focus na první input
			options.el.find("input:first").focus();
			
		// okno již je vytvořeno
		} else {
			// focus
			this.openedWindows[options.name].dialog("open");
		}
	},
	
	/**
	 *	Získat objekt okna
	 *	@param string name jméno okna
	 *	@return jQuery|null
	 */
	getWindow: function (name) {
		return this.openedWindows[name] ? this.openedWindows[name] : null;
	}
});